#导入相应的库和包,以及相应的类
from flask import Blueprint, request, render_template, url_for, redirect
from models import House
import math

# 创建蓝图对象
list_page = Blueprint('list_page', __name__)

#定义一个query路由
#根据地址（addr)和户型(rooms)字段查询房源信息
#使用request.args.get获取查询参数
#使用SQLAlchemy的filter方法从House模型中筛选数据
#再用publish_time降序排列
#最后将结果传递给search_list_html模板进行渲染
@list_page.route('/query')
def search_txt_info():
    # 获取地区字段的查询
    if request.args.get('addr'):
        addr = request.args.get('addr')
        result = House.query.filter(House.address == addr).order_by(House.publish_time.desc()).all()
        return render_template('search_list.html', house_list=result)

    # 获取户型字段的查询
    if request.args.get('rooms'):
        rooms_info = request.args.get('rooms')
        result = House.query.filter(House.rooms == rooms_info).order_by(House.publish_time.desc()).all()
        return render_template('search_list.html', house_list=result)
    return redirect(url_for('index_page.index'))

#最新房源列表展示(/list/pattern/<int:page>路由)
#该视图函数处理/list/pattern/<int:page>路由,用于展示最新房源列表
#先获取房源总数量，并计算总页数(每页显示10条)
#使用paginate方法实现分页功能，并按publish_time降序排列房源
#将分页结果传递给list.html模板进行渲染
@list_page.route('/list/pattern/<int:page>')
def return_new_list(page):
    # 获取房源总数量
    house_num = House.query.count()
    # 计算总的页码数，向上取整
    total_num = math.ceil(house_num / 10)
    result = House.query.order_by(
        House.publish_time.desc()).paginate(page=page, per_page=10)
    return render_template('list.html', house_list=result.items, page_num=result.page, total_num=total_num)

#最热房源列表展示(/list/hot_house/<int:page>路由)
#该视图函数处理/list/hot_house/<int:page>路由,用于展示最热房源列表
#先获取房源总数量，并计算总页数(每页显示10条)
#使用paginate方法实现分页功能，并根据page_views(页面浏览量)降序排列房源
#将分页结果传递给list.html模板进行渲染
@list_page.route('/list/hot_house/<int:page>')
def return_hot_list(page):
    # 获取房源总数量
    house_num = House.query.count()
    # 计算总的页码数，向上取整
    total_num = math.ceil(house_num / 10)
    result = House.query.order_by(
        House.page_views.desc()).paginate(page=page, per_page=10)
    return render_template('list.html', house_list=result.items, page_num=result.page, total_num=total_num)

#数据处理函数和模板过滤器
#deal_title_over函数处理房源标题,当长度超过15字符时,用省略号替换
def deal_title_over(word):
    if len(word) > 15:
        return word[:15] + '...'
    else:
        return word

#deal_direction函数处理房源朝向和交通条件，当为空时显示"暂无信息"
def deal_direction(word):
    if len(word) == 0 or word is None:
        return '暂无信息！'
    else:
        return word

#使用add_app_template_filter方法将两个函数注册为模板过滤器,在模板中可以使用dealover和dealdirection来调用
list_page.add_app_template_filter(deal_title_over, 'dealover')
list_page.add_app_template_filter(deal_direction, 'dealdirection')
